<?php 
/**
* Класс видов
*/
class Engine_View {

	protected $title;
	protected $HTML 	= null;

	protected $layout 	= null;
	protected $template = null;
    protected $helper   = null;

	protected $params 	= array();
	protected $scripts 	= array();
	protected $styles 	= array();

    protected $menuParent = null;
    protected $menuName   = null;

	// Конструктор вида 
	// собирает из кофига значения по-умолчанию
	public function __construct() {
		$config = Application_Bootstrap::getConfig();
		if (isset($config['defaults']['scripts'])) { 
			$this->scripts = $config['defaults']['scripts']; 
		}
		if (isset($config['defaults']['styles'])) { 
			$this->styles = $config['defaults']['styles'];
		}

		$this->title = isset($config['defaults']['title']) ? $config['defaults']['title'] : '';
		
		if (isset($config['defaults']['defaultLayout'])) {
			$this->setLayout($config['defaults']['defaultLayout']);
		}
        $this->helper = new Engine_View_Helper_Bootstrap();
		$this->errors = Application_Bootstrap::getRequest()->getFormErrors();
		Application_Bootstrap::getRequest()->clearFormErrors();
	}

	// подготавливаем HTML к выдаче.
	private function __prepareHTML() {
		$HTML = "<!DOCTYPE html> \r\n";
		$HTML .= "<html> \r\n";
		$HTML .= "<head>\r\n";
		$HTML .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> \r\n";
		$HTML .= "<title>" . $this->title . "</title>\r\n";
		if (is_array($this->scripts)) {
			foreach ($this->scripts as $script) {
				$HTML .= "<script type=\"text/javascript\" src=\"$script\"></script>\r\n";
			}
		}

		if (is_array($this->styles)) {
			foreach ($this->styles as $style) {
				$HTML .= "<link href=\"$style\" media=\"screen\" rel=\"stylesheet\" type=\"text/css\">\r\n";
			}
		}

		$HTML .= "</head>\r\n";
		$HTML .= "<body data-accent=\"blue\"> \r\n";
		echo $HTML;
		
		if (!$this->layout()) {

			$this->template();
		}

		$HTML = "</body> \r\n";
		$HTML .= "</html> \r\n";
		echo $HTML;
	}

    public function setMenuParent($parent) {
        $this->menuParent = $parent;
    }

    public function setMenuName($name) {
        $this->menuName = $name;
    }

	// рендерим страничку
	public function render() {
		ob_start();
		$this->__prepareHTML();
		$content = ob_get_clean();
		echo $content;
	}

	//добавить JavaScript
	public function addScript($scriptPath) {
		array_push($this->scripts, $scriptPath);
	}

	//добавить css
	public function addStyle($stylePath) {
		array_push($this->styles, $stylePath);
	}

	//добавить JavaScript
	public function applyScript($scriptPath) {
		echo "<script language='JavaScript'>";
		include $scriptPath;
		echo "</script>";
	}

	//добавить css
	public function applyStyle($stylePath) {
		echo "<style>";
		include $stylePath;
		echo "</style>";
	}

	// магический сеттер
	public function __set($name, $value) {
		$this->{$name} = $value;
	}

	// магический геттер
	public function __get($name) {
		return $this->{$name};
	}

	// переопределить шаблон вместо шаблона по умолчанию.
	public function setTemplate($template) {
		$this->template = $template;
	}

	// переопределение лейаута
	public function setLayout($name) {
		$path = $_SERVER['DOCUMENT_ROOT'] 
		. DIRECTORY_SEPARATOR . '..' 
		. DIRECTORY_SEPARATOR . 'application'
		. DIRECTORY_SEPARATOR . 'Layout'
		. DIRECTORY_SEPARATOR . $name . '.phtml';

		if (file_exists($path)) {
			$this->layout = $path;
			return true;
		} else {
			return false;
		}
	}


	
	// вернуть все параметры
	public function getParams() {
        return $this->params;
	}
	// вернуть параметр с именем $name, а если нет то значение по умолчанию
	public function getParam($name, $default = false) {
        if (isset ($this->params[$name])) {
        	return $this->params[$name];
        }
        else {
        	return $default;
        }
    }

	// установить параметры из массива КЛЮЧ=>ЗНАЧЕНИЕ 
	public function setParams(array $params) {
        foreach ($params as $key=> $value) {
              $this->params[$key] = $value;
		}
	}

	public function layout() {
		if ($this->layout !== null && file_exists($this->layout)) {
			include $this->layout;
			return true;
		} else return false;
	}

	public function template() {
		if ($this->template !== null && file_exists($this->template)) {
			include $this->template;
		}
	}

	public function addErrors($data) {
		if ($data) {
			$this->setParams(array('errors' => $data));
		}
	}

}
